#define  _LINKLIST_H_
#ifdef  _LINKLIST_H_
#include <stddef.h>
#include "DynamicArray.h"
using ElementType = int;
class LinkList
{
public:
    LinkList();
    LinkList(const LinkList& list);
    LinkList& operator=(const LinkList& list);
    ~LinkList();    //析构

    //插入
    void InsertTail(const ElementType& element);    //尾插法

    void InsertHead(const ElementType& element);    //头插法

    void InsertByIndex(size_t index, const ElementType &element);  //中间插

    void RemoveByIndex(size_t index);   //按位置删除

    void RemoveByElement(const ElementType &element);    //按值删除

    ElementType* FindByIndex(size_t index);  //查找

    DARRAY::DynamicArray FindByElement(const ElementType & element);          //按值查

    //修改
    void UpdateByIndex(size_t index,const ElementType& element);    //按位置修改

    void UpdateByElement(const ElementType & oldValue, const ElementType & newValue);//按值修改

    //排序
    void BubbleSort();      //冒泡排序 

    void Sort();        //快速排序

    ElementType* GetReserveIndex(size_t index);   //倒数第n个元素

    LinkList Merge(const LinkList & list);      //归并

    //交并补

    void Reserve(); //链表的逆序

    void Reserve2(); //递归逆序

    void show();
private:
    struct Node
    {
        Node(const ElementType& value)
        {
            this->value = value;
            next = nullptr;       
        }

        ElementType value;//数据域
        Node *next;//指针域
    };
    void Fastsort(Node *start, Node *end);
    Node* reserve(Node *node);
    Node *head; //头指针
    size_t size;    //元素的个数
};


#endif
